#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <semaphore.h>
#include <unistd.h>
#include <signal.h>

#include "ringfifo.h"
#include <time.h>

#define FRAM_SIZE 15000
int is_start_write = 0;
void sigusr1_handler(int signum) {
    printf("recv sig from other process!!!!!!!!!!!!!!!!!!!!!!!!!\n");
    usleep(500*1000);
    if(signum == SIGUSR1) // start
        is_start_write = 1;
    else
        is_start_write = 0;
}

int main() {
    
    int i = 0;
    char data[FRAME_SIZE];
    // 注册 SIGUSR1 信号的处理函数
    signal(SIGUSR1, sigusr1_handler);
    CircularBuffer shared_buffer;
    create_ringfifo(&shared_buffer);
    destroy_ringfifo(&shared_buffer);
    create_ringfifo(&shared_buffer);
    // 打开文件
    FILE *file = fopen("surfing.265", "rb");
    if (file == NULL) {
        fprintf(stderr, "Failed to open file.\n");
        return 1;
    }
    while (1) {
        if(is_start_write == 1)
        {
            // 从文件中读取数据
            size_t bytes_read = fread(data, 1, FRAM_SIZE, file);
            if (bytes_read == 0) {
                // 到达文件末尾，重新设置文件指针到开头
                fseek(file, 0, SEEK_SET);
                continue; // 继续循环读取
            }
            // 将读取的数据写入 ringfifo
            #if 0
            for(int i = 0;i < 32;i++)
            {
                printf("%d ",data[i]);
            }
            printf("\n");
            #endif
            ringfifo_write(&shared_buffer, data, bytes_read);
        }
        
        usleep(40*1000); // 模拟生产过程
    }

    // 关闭文件
    fclose(file);
    // 销毁 ringfifo
    destroy_ringfifo(&shared_buffer);
    return 0;
}
